home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / Point.h < prev    next >
C/C++ Source or Header  |  1992-04-27  |  3KB  |  121 lines

  1. #ifndef Point_First
  2. #ifdef __GNUG__
  3. //pragma once
  4. #pragma interface
  5. #endif
  6. #define Point_First
  7.  
  8. #include "Types.h"
  9. #include "Stream.h"
  10.  
  11. class Point {
  12. public:
  13.     int x, y;
  14.  
  15. public:
  16.     
  17.     Point()
  18.         { x= y= 0; }
  19.     
  20.     Point(int xy)
  21.         { x= y= xy; }
  22.     
  23.     Point(int sx, int sy)
  24.         { x= sx; y= sy; }
  25.  
  26.     Point(float sx, float sy)
  27.         { x= (int)sx; y= (int)sy; }
  28.  
  29.     int &operator[](bool b) 
  30.         { if (b) return y; else return x; }
  31.  
  32.     friend Point operator+(Point p1, Point p2)
  33.         { return Point(p1.x + p2.x, p1.y + p2.y); }
  34.  
  35.     friend Point operator-(Point p)
  36.         { return Point(-p.x, -p.y); }
  37.  
  38.     friend Point operator-(Point p1, Point p2)
  39.         { return Point(p1.x - p2.x, p1.y - p2.y); }
  40.  
  41.     friend Point operator*(Point p1, Point p2)
  42.         { return Point(p1.x * p2.x, p1.y * p2.y); }
  43.  
  44.     friend Point operator/(Point p1, Point p2)
  45.         { return Point(p1.x / p2.x, p1.y / p2.y); }
  46.         
  47.     friend Point Scale(Point p, Point num, Point denom);
  48.         
  49.     friend Point Scale(Point p, float sx, float sy);
  50.         
  51.     Point operator+=(Point p)
  52.         { x+= p.x; y+= p.y; return *this; }
  53.  
  54.     Point operator-=(Point p)
  55.         { x-= p.x; y-= p.y; return *this; }
  56.  
  57.     Point operator*=(Point p)
  58.         { x*= p.x; y*= p.y; return *this; }
  59.  
  60.     Point operator/=(Point p)
  61.         { x/= p.x; y/= p.y; return *this; }
  62.  
  63.     Point Half() const;
  64.  
  65.     friend bool operator==(Point p1, Point p2)
  66.         { return (bool) (p1.x == p2.x && p1.y == p2.y); }
  67.  
  68.     friend bool operator!=(Point p1, Point p2)
  69.         { return (bool) (p1.x != p2.x || p1.y != p2.y); }
  70.  
  71.     friend bool operator>(Point p1, Point p2)
  72.         { return (bool) (p1.x > p2.x && p1.y > p2.y); }
  73.  
  74.     friend bool operator<(Point p1, Point p2)
  75.         { return (bool) (p1.x < p2.x && p1.y < p2.y); }
  76.  
  77.     friend bool operator>=(Point p1, Point p2)
  78.         { return (bool) (p1.x >= p2.x && p1.y >= p2.y); }
  79.  
  80.     friend bool operator<=(Point p1, Point p2)
  81.         { return (bool) (p1.x <= p2.x && p1.y <= p2.y); }
  82.  
  83.     friend Point Abs(Point);
  84.  
  85.     friend Point Sign(Point);
  86.  
  87.     friend Point Min(Point, Point);
  88.  
  89.     friend Point Max(Point, Point);
  90.     
  91.     friend Point Range(Point, Point, Point);
  92.  
  93.     friend Point Half(Point);
  94.     
  95.     friend float Phi(Point);
  96.     
  97.     friend float Length(Point);
  98.         // return sqrt(p.x*p.x + p.y*p.y);
  99.         
  100.     friend Point PolarToPoint(double ang, double fx, double fy);
  101.         // return Point(fx*cos(ang), fy*sin(ang));
  102.  
  103.     friend void Swap(Point &p1, Point &p2);
  104.  
  105.     friend Point Flip(Point &p);
  106.  
  107.     friend OStream& operator<< (OStream &s, Point p);
  108.     friend IStream& operator>> (IStream &s, Point &p);
  109.     
  110.     char *AsString() const;
  111. };
  112.  
  113. SimpleMetaDef(Point);
  114.  
  115. #ifndef FakeExternalDecl
  116.     extern const Point gPoint_1, gPoint0, gPoint1, gPoint2, gPoint3, gPoint4,
  117.     gPoint5, gPoint6, gPoint7, gPoint8, gPoint10, gPoint16, gPoint32, gPoint64;
  118. #endif
  119.  
  120. #endif
  121.